import java.util.*;

public class Test {
    public static void main(String[] args) {

    }
}
class Solution {
    int MOD = 1000000007;
    public int numberOfGoodPartitions(int[] nums) {
        Map<Integer, Integer> st = new HashMap<>();
        Map<Integer, Integer> end = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for(int r=0; r<nums.length; r++){
            if(st.containsKey(nums[r])){
                end.put(nums[r],r);
            }else{
                st.put(nums[r],r);
                end.put(nums[r],r);
                list.add(nums[r]);
            }
        }
        int ans = 1;
        int j = end.get(list.get(0));
        for(int k=1; k<list.size(); k++){
            int x = list.get(k);
            int a = st.get(x);
            int b = end.get(x);
            if(a > j){
                ans = ans * 2 % MOD;
            }
            j = Math.max(j,b);
        }
        return ans;
    }
}
